Modern computers connect to networks in order to receive and send information. By receiving information from other computers, the capabilities of a computer system greatly expand. For example, a computer connected to the Internet can download a wealth of information, which is not necessarily stored in the physical data storage drives of the computer, or the computer can communicate with other computers. The Internet exemplifies most of the benefits provided by networking computers.
Networked computers offer users an expanded user experience through the Internet. Users can access information quickly and freely using web-browsing software. More recently, computer companies are using networks to introduce parallel processing under the theory that a group of computers processing information in parallel can solve a problem more efficiently than one computer working alone. Virtual machines, virtual appliances, cloud computing, massively parallel processing systems, and many other examples exhibit how computers using networks expand their processing capabilities.
The following is an example of a computer using TCP/IP to perform Internet communication over a series of networks. Networking relies on a number of software layers to send information over a network. At the top, an application layer interacts with a user and processes tasks under the command of a user. Whenever an application needs to communicate with another computer, which may be running another application, the application calls upon an Internet layer to handle delivery of data. The Internet layer commonly implements the Internet Protocol (“IP”), such as IPv4 or IPv6. The Internet protocol creates packets of information, which are a sequence of octets containing a header and body. The header describes the packets source, destination, and control information, while the body describes the data being transmitted. The IP layer then transmits the created packet through network hardware, such as an Ethernet link, to another computer system. When the packet arrives at the destination computer, the destination computer calls upon a transport layer. Commonly, the transport layer relies on transmission control protocol (TCP) to provide a communication service. Due to network congestion or unpredictable network behavior, some data packets may be lost, corrupted, or delivered out of order. In general, TCP detects problems in the received packets, requests retransmission of lost data, rearranges out-of-order data, and reassembles the received data so that an application on the receiving computer system may process the received data.
For example, in the context of a website, a server may send an HTML file describing a website hosted by the server. The server calls the TCP layer to divide the HTML file into a sequence of segments, and the TCP layer forwards the segments to the IP layer. The IP layer creates IP packets for transmission by adding a header that includes, among other things, a destination IP address. When a client computer receives the IP packets from the server, the TCP layer on the client side reassembles the received packets, and any other processes, to assure that all data is received by the server. The TCP layer then streams the information to a web-browser running on the client computer, the web-browser processes the information and displays the website.
In general, a networking API defines an interface between an application and the underlying network stack. For example, an application running on the Microsoft® Windows® operating system calls the Windows Sockets API (“Winsock”) to access the underlying TCP/IP protocol stack. Winsock guarantees that a conforming application will function with a conforming protocol implementation from any network software vendor.
While TCP/IP and networking APIs perform many important steps for network communication, these software layers cannot perform many other important network functions. For example, authentication services are left up to the application layer to perform. More specifically, if a client computer requests access to a website, TCP/IP creates the request on the client side, and TCP/IP on the server side unpackages the transmitted data and sends the unpackaged data to the application hosting the website. Upon receiving the request for access, the application performs authentication services by checking a username and password. In other words, a connection between the host computer and the client computer is opened before the host computer has a chance to authenticate the user.
Also, because the TCP/IP stack has an agreed upon standard, the TCP/IP stack cannot be changed by an application. So, an application must specify its communication protocols, like security protocols, type of networking protocols, etc. So, an application developer would need to perform a software update anytime he wished to change how the application transmits data. For example, a public connection may use TCP/IP, but a more private connection may call for a different type of protocol, such as Infinband. But, because of the inherent problems of updating an application, a developer may decide against changing the called network protocol.
In light of all these problems, there exists a need in the art to securely open network connections and avoid application updates for network transmission changes.